#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
快速测试脚本
非交互式测试新闻日报系统
"""

from datetime import datetime
from email_config import SENDER_EMAIL, SENDER_PASSWORD, RECIPIENT_EMAIL, validate_config
from email_sender import create_qq_email_sender
from news_daily import NewsDailyGenerator


def test_email_connection():
    """测试邮件连接"""
    print("📧 测试邮件连接...")
    
    try:
        # 创建邮件发送器
        sender = create_qq_email_sender(SENDER_EMAIL, SENDER_PASSWORD)
        
        # 创建测试新闻数据
        test_news = {
            'title': '36kr新闻测试',
            'description': '这是一封测试邮件，用于验证邮件配置',
            'last_updated': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
            'total_items': 1,
            'items': [{
                'title': '邮件连接测试成功',
                'link': 'https://example.com/test',
                'published': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                'description': '如果您收到这封邮件，说明邮件配置正确，新闻日报系统可以正常工作。'
            }]
        }
        
        test_analysis = """
🤖 AI测试分析

这是一封测试邮件，用于验证新闻日报系统的邮件发送功能。

测试项目：
✅ 邮件连接测试
✅ HTML格式测试  
✅ 中文内容测试
✅ 链接功能测试

如果您看到这封邮件，说明：
1. 邮箱配置正确
2. 授权码有效
3. 邮件发送功能正常
4. 可以开始使用新闻日报系统

下一步：
- 运行 python start_daily_news.py 启动定时服务
- 系统将在每天指定时间自动发送新闻日报
        """
        
        # 发送测试邮件
        print(f"正在发送测试邮件到 {RECIPIENT_EMAIL}...")
        success = sender.send_news_daily(RECIPIENT_EMAIL, test_news, test_analysis)
        
        if success:
            print("✅ 测试邮件发送成功！")
            print("请检查您的邮箱，应该会收到一封测试邮件。")
            return True
        else:
            print("❌ 测试邮件发送失败")
            return False
            
    except Exception as e:
        print(f"❌ 邮件连接测试失败: {e}")
        return False


def test_news_generation():
    """测试新闻生成功能"""
    print("\n📰 测试新闻生成功能...")
    
    try:
        # 创建新闻日报生成器
        generator = NewsDailyGenerator()
        
        # 生成测试报告
        print("正在生成新闻报告...")
        report = generator.generate_daily_report(max_news_items=3)
        
        if 'error' in report:
            print(f"❌ 新闻生成失败: {report['error']}")
            return False
        
        print("✅ 新闻生成成功")
        print(f"   - 获取到 {len(report['news_data']['items'])} 条新闻")
        print(f"   - AI分析长度: {len(report['ai_analysis'])} 字符")
        
        # 显示前2条新闻标题
        print("\n📋 新闻标题预览:")
        for i, item in enumerate(report['news_data']['items'][:2], 1):
            print(f"   {i}. {item['title']}")
        
        return True
        
    except Exception as e:
        print(f"❌ 新闻生成测试失败: {e}")
        return False


def test_full_workflow():
    """测试完整工作流程"""
    print("\n🔄 测试完整工作流程...")
    
    try:
        # 创建新闻日报生成器
        generator = NewsDailyGenerator(
            sender_email=SENDER_EMAIL,
            sender_password=SENDER_PASSWORD,
            recipient_email=RECIPIENT_EMAIL
        )
        
        # 生成并发送日报
        print("正在生成并发送完整日报...")
        success = generator.generate_and_send_daily(max_news_items=5)
        
        if success:
            print("✅ 完整工作流程测试成功！")
            print("您应该会收到一封完整的新闻日报邮件。")
            return True
        else:
            print("❌ 完整工作流程测试失败")
            return False
            
    except Exception as e:
        print(f"❌ 完整工作流程测试失败: {e}")
        return False


def main():
    """主函数"""
    print("=" * 60)
    print("🧪 新闻日报系统快速测试")
    print("=" * 60)
    print(f"测试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print("=" * 60)
    
    # 检查配置
    print("\n🔧 检查配置...")
    errors = validate_config()
    if errors:
        print("❌ 配置验证失败:")
        for error in errors:
            print(f"  - {error}")
        print("\n请先运行 python setup_email.py 配置邮箱信息")
        return
    
    print("✅ 配置验证通过")
    print(f"  发送邮箱: {SENDER_EMAIL}")
    print(f"  接收邮箱: {RECIPIENT_EMAIL}")
    
    # 运行所有测试
    print("\n🚀 开始运行所有测试...")
    
    success_count = 0
    total_tests = 3
    
    # 测试1: 邮件连接
    if test_email_connection():
        success_count += 1
    
    # 测试2: 新闻生成
    if test_news_generation():
        success_count += 1
    
    # 测试3: 完整流程
    if test_full_workflow():
        success_count += 1
    
    # 显示测试结果
    print("\n" + "=" * 60)
    print("📊 测试结果")
    print("=" * 60)
    print(f"通过测试: {success_count}/{total_tests}")
    
    if success_count == total_tests:
        print("🎉 所有测试通过！系统可以正常使用。")
        print("\n下一步:")
        print("- 运行 python start_daily_news.py 启动定时服务")
        print("- 系统将每天自动发送新闻日报到您的邮箱")
    else:
        print("⚠️  部分测试失败，请检查配置和网络连接。")
        print("\n常见问题:")
        print("- 检查邮箱授权码是否正确")
        print("- 确认网络连接正常")
        print("- 检查RSS源是否可访问")


if __name__ == "__main__":
    main()
